var utils ={
	/*
		name     表示cookie的名称
		value    表示cookie的值
		option   过期时间，路径（Object） 如：{ expires : 3,path : '/' }	三天后cookie过期在根路径下
	*/	
	setCookie( name,value,option ){
		// 拼接cookie的名称和值
		// 并给cookie的值编码
		var str = `${name}=${encodeURIComponent(value)}`
		// 判断有没有传option
		if( option ){
			// 判断如果option里面传的值是expires
			if( option.expires ){
				// 获取现在的时间戳
				var date = new Date()
				// 设置过期时间是好久
				date.setDate( date.getDate() + option.expires )
				 // 拼接过期时间
				 str += ` ;expires=${ date.toUTCString() } `
			}
			// 判断如果option里面传的值是path
			if( option.path ){
				// 拼接根路径
				str += ` ;path=${option.path} `
			}
		}
		document.cookie = str
	},
	/*
		key     表示cookie的名称
		return  如果没有return它的返回值是undefined
	*/
	getCookie( key ){
		// 将cookie存入一个变量中
		var str = document.cookie
		// 将cookie用split方法将; 剪切掉并存进数组里
		var arr = str.split("; ")
		// 定义一个对象
		var obj = {}
		// 遍历arr并传入一个值表示arr数组里面的值
		arr.forEach( function(cookie){
		// 将arr数组中的值的=剪切掉
		var arr1 = cookie.split( "=" )
		// 将arr1[0]作为属性名arr1[1]作为属性值放入obj
		// 并将arr[1]的属性值解码
		obj[arr1[0]] = decodeURIComponent(arr1[1])
		})
		//将obj返回出去
		return obj[key]
	},
	/*
			url      表示请求地址
			query    表示地址后面携带的参数
			cb       表示请求成功后回调
			isJson   如果为true表示这是个将json转换成对象false就输出字符串（默认为ture）
	*/
	get ( url , query , cb , isJson = true ) {
		//判断是否在query里面传值
		if( query ){
			//为地址拼接？链接符
			url += "?"
			//遍历query传进来的值
			for(var key in query){
				//将遍历的值拼接在地址后面遍历的值之间用&链接
				url += `${key}=${query[key]}&`
			}
			//将url后面多余的&剪切掉
			url = url.slice( 0,-1 )
		}
		//创建一个XMLHttpRequest对象
		var xhr = new XMLHttpRequest()
		//使用get方式打开链接
		xhr.open('get', url)
		//发送请求
		  xhr.send()
		//当状态改变
		xhr.onreadystatechange = function(){
			//判断如果它的状态值 === 4
			if(xhr.readyState === 4 ){
				//判断如果它的状态码 === 200
				if(xhr.status === 200){
					//请求成功
					//如果isJson为ture将它转换成对象为fales直接发送
					var date = isJson ? JSON.parse(xhr.responseText) : xhr.responseText
					//当cb传了参并且回调同时满足的时候在执行
					cb && cb(date)
					
				}
			}
		}
	},
	/*
			url       表示请求地址
			query     表示携带的参数
			cb        表示请求成功后回调函数
			isJson    如果为true表示这是个将json转换成对象false就输出字符串（默认为ture）
	*/
	post ( url,query,cb,isJson = true ) {
		//创建一个变量接收query传来的值
		var str = ''
		// 如果query传了值
		if(query){
			// 将传入的值遍历
			for( var key in query){
				// 将传入的值给str并在后面加上&链接符
				str += `${key}=${query[key]}&`
			}
		// 将str里面最后一个&链接符剪切掉
		str = str.slice( 0,-1 )
		}
		// 创建一个XMLHttpRequest对象
		var xhr = new XMLHttpRequest()
		// 使用post方式链接地址
		xhr.open( 'post', url )
		// 告诉后端请求数据是以urlencoded的方式来发送的
		xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded")
		// 将传入的值发送
		xhr.send(str)
		// 当前状态变化
		xhr.onreadystatechange = function (){
			// 判断如果状态值 === 4
			if( xhr.readyState === 4 ){
				// 判断如果状态码 === 200
				if( xhr.status === 200 ){
					// 请求成功
					// 判断传过来的数据ture为对象false为字符串
					var data = isJson ? JSON.parse(xhr.responseText) : xhr.responseText
					//当cb传入了参数并且回调同时满足在执行
					cb && cb(data)
				}
			}
		}
	},
  /*	
		get请求
		url       表示请求地址
		query	  表示请求携带的参数
		isJson    是否json序列化，默认为true
  */
  fach (url, query , isJosn = true) {
	  // 判断如果有query
	  if(query){
		  // 在url后面拼接？链接符
		  url += '?'
		  // 遍历query传过来的参数
		  for(var key in query){
			  // 在url后面拼接属性名和属性值并在后面拼接&链接
			  url += `${key}=${query[key]}&`
		  }
		  // 将url最后面的&链接符剪切掉
		  url = url.slice(0 , -1)
	  }
	  // 创建一个promise并将promise返回出去
	  // 并传入两个参数进去resolve为成功 reject为失败
	  return new Promise((resolve , reject) =>{
		  // 创建一个 XMLHttpRequest()对象
		  var xhr = new XMLHttpRequest()
		  // 使用get方式打开链接
		  xhr.open('get', url)
		  // 发送请求
		  xhr.send()
		  //状态改变
		  xhr.onreadystatechange = function (){
			  //当状态值为4
			  if(xhr.readyState === 4 ){
				  //当状态码为200
				  if(xhr.status === 200){
					  //请求成功
					  //如果isJson为ture将它转换成对象为fales直接发送
					  var data = isJosn ? JSON.parse(xhr.responseText) : xhr.responseText
					  resolve(data)
				  }else{
					  reject()
				  }
			  }
		  }
	  })
}
}